package com.dubious.interview.euler;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Problem22 {

    /**
     * Using Problem22.in, a 46K text file containing over five-thousand first names, 
     * begin by sorting it into alphabetical order. Then working out the alphabetical 
     * value for each name, multiply this value by its alphabetical position in the 
     * list to obtain a name score.
     * 
     * For example, when the list is sorted into alphabetical order, COLIN, which is 
     * worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would 
     * obtain a score of 938 * 53 = 49714.
     * 
     * What is the total of all the name scores in the file?
     */
    public static long run(String input)
    {
        // parse the input to retrieve the collection of names
        List<String> names = new ArrayList<String>();
        String[] namesWithQuotes = input.split(",");
        for(String nameWithQuotes : namesWithQuotes)
        {
            names.add(nameWithQuotes.substring(1, nameWithQuotes.length() - 1));
        }
        
        // sort in alphabetical order
        Collections.sort(names);
        
        long totalNameScore = 0;
        for(int i = 0; i < names.size(); i++)
        {
            // calculate name score of ith name
            long nameScore = 0;
            String name = names.get(i);
            for(int j = 0; j < name.length(); j++)
            {
                nameScore += name.charAt(j) - 'A' + 1;
            }
            
            // add to the total name score
            totalNameScore += nameScore * (i+1);
        }
        
        return totalNameScore;
    }
}
